package shop.local.domain;

import java.io.IOException;

import shop.local.domain.exceptions.KundeExistiertBereitsException;
import shop.local.domain.exceptions.MitarbeiterExistiertBereitsException;
import shop.local.persistence.FilePersistenceManager;
import shop.local.persistence.PersistenceManager;
import shop.local.valueobjects.Kunde;
import shop.local.valueobjects.KundenListe;
import shop.local.valueobjects.MitarbeiterListe;


public class KundenVerwaltung {
	
	private KundenListe kundenBestand = new KundenListe();

	private PersistenceManager pm = new FilePersistenceManager();
	
	public void liesDaten(String datei) throws IOException {

		pm.openForReading(datei);

		Kunde einKunde;
		do {
			einKunde = pm.ladeKunden();
			if (einKunde != null) {
				try {
					einfuegen(einKunde);
				} catch (KundeExistiertBereitsException e1) {
				}
			}
		} while (einKunde != null);

		pm.close();
	}

	
	public void schreibeDaten(String datei) throws IOException  {
		pm.openForWriting(datei);

		KundenListe liste = kundenBestand;
		
		for (int i = 0; i <= liste.size(); i++) {
			Kunde k = liste.get(i);
			if (k != null) {
				pm.speichereKunden(k);
			}
		}
		
		/*while (liste != null) {
			Kunde k = liste.gibErstenKunden();
			if (k != null) {
				pm.speichereKunden(k);
			}
			liste = liste.gibRestlicheKunden();
		}*/
		
		pm.close();
	}
	
	public int letzteID() {
		if (kundenBestand.letzterKunde() == null) {
			return 0;
		}
		else {
			return kundenBestand.letzterKunde().getKundenNr();
		}
	}
		
	public void einfuegen(Kunde einKunde) throws KundeExistiertBereitsException {
		kundenBestand.einfuegen(einKunde);
	}
	
	public KundenListe gibKunden() {
		return kundenBestand;
	}
	
	public int kLogin(String kName, String kPasswort) {
		KundenListe liste = kundenBestand;
		
		for (int i = 1; i <= liste.size(); i++) {
			
			String kNameSystem = liste.get(i).getKundeName();
			String kNamePasswort = liste.get(i).getKundenPasswort();
			
			if ( kName.equals(kNameSystem) && kPasswort.equals(kNamePasswort) ) {
				return liste.get(i).getKundenNr();
			}
		}
		return 0;
	}

	public void rechnungDrucken() {
		rechnungDrucken();
	}


	public KundenListe sucheKundenNummer(int kNr) {
		KundenListe suchErg = new KundenListe();
		//ArtikelListe aktArtikelListenElt = artikelBestand;

		for (int i = 1; i <= kundenBestand.size(); i++) {
			
			// 
			int kundenNummerSystem = kundenBestand.get(i).getKundenNr();
			if (kundenNummerSystem == kNr) {
				try {
					suchErg.einfuegen(kundenBestand.get(i));
				} catch (KundeExistiertBereitsException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}	
			}
		}
		return suchErg;
	}

}
